home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 3 / DOS069.dsk / FRENCH MILITARY GAME.bas < prev    next >
BASIC Source File  |  2012-02-16  |  9KB  |  240 lines

  1. 5  DEF  FN P(X) = 2 ^(X -1)
  2. 10  DIM S(165),R(30,2),L(11,11),W(3),A(165,11)
  3. 15  REM  FRENCH MILITARY GAME, SIXTH BOOK OF MATHEMATICAL GAMES FROM SCIENTIFIC AMERICAN BY MARTIN GARDNER
  4. 20  REM  INCORPORATES MATCH. LEARNING FROM UNEXPECTED HANGING BY MARTIN GARDNER
  5. 25  REM  PROGRAMMED BY G.H. HERD SEPT.78 PUBLISHED IN CREATIVE COMPUTING SEPT.79
  6. 30  TEXT : HOME 
  7. 35  VTAB 10: HTAB 9
  8. 40  PRINT "THE FRENCH MILITARY GAME"
  9. 42  PRINT 
  10. 44  HTAB 9
  11. 45  PRINT "  BY  MARTIN GARDNER"
  12. 75  LET I = 1
  13. 80  FOR L = 1 TO 9
  14. 90  LET L1 =  FN P(L)
  15. 100  FOR M = L +1 TO 10
  16. 110  LET M1 =  FN P(M)
  17. 120  FOR R = M +1 TO 11
  18. 130  LET S(I) = L1 +M1 +( FN P(R))
  19. 140  LET I = I +1
  20. 150  NEXT R
  21. 160  NEXT M
  22. 170  NEXT L
  23. 175  HOME : VTAB 12: PRINT "DO YOU NEED INSTRUCTIONS? ";: INPUT IN$: IF  LEFT$(IN$,1) < >"N"  THEN  GOSUB 12000
  24. 180  REM  LOAD UP LEARNING CURVE
  25. 190  REM  DISK COMMAND "LOAD DATA #5,34,A
  26. 200  FOR I = 1 TO 30
  27. 210  FOR J = 1 TO 2
  28. 220  LET R(I,J) = 0
  29. 230  NEXT J
  30. 240  NEXT I
  31. 250  FOR I = 1 TO 11
  32. 260  FOR J = 1 TO 11
  33. 270  READ L(I,J)
  34. 280  NEXT J
  35. 290  NEXT I
  36. 300  REM  L(I,J)=0 MEANS MOVE I      TO J NOT LEGAL
  37. 310  REM  L(I,J)=1 MEANS MOVE I      TO J LEGAL BLACK ONLY
  38. 320  REM  L(I,J)=2 MEANS MOVE I      TO J LEGAL FOR BOTH
  39. 330  REM 
  40. 340  LET B = 6
  41. 350  LET W(1) = 1
  42. 360  LET W(2) = 2
  43. 370  LET W(3) = 4
  44. 380  LET I0 = 1
  45. 390  GOSUB 3000
  46. 490  GOSUB 10000
  47. 500  REM  MAIN PROGRAM LOOP
  48. 510  PRINT "WHITE PEICES ARE AT ";W(1);" ";W(2);" ";W(3)
  49. 520  PRINT "THE BLACK PIECE IS AT ";B
  50. 530  PRINT "YOUR MOVE, FROM-TO X,Y ";
  51. 540  INPUT X,Y
  52. 545  IF X = 0  AND Y = 0  THEN 730
  53. 550  REM  WAS IT A LEGAL MOVE
  54. 560  GOSUB 2000
  55. 570  IF L2 = 1  THEN 600
  56. 580  PRINT "FOUL !!!!!<CTRL-G><CTRL-G> TRY AGAIN."
  57. 590  GOTO 510
  58. 600  REM  LEGAL MOVE - WHAT IS   WHITE POSITION INDEX (S3)
  59. 602  COLOR= 3: ON X GOSUB 11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011
  60. 604  COLOR= 15: ON Y GOSUB 11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011
  61. 610  GOSUB 3000
  62. 615  IF I0 < = 19  THEN 630
  63. 620  PRINT "THAT'S 20 MOVES, ACE<CTRL-G>, AND YOU HAVEN'T   TRAPPED ME."
  64. 621  GOTO 730
  65. 622  REM  WHAT IS BLACK'S BEST        MOVE  -  IF ANY
  66. 630  GOSUB 4000
  67. 640  IF M4 = 0  THEN 760
  68. 650  REM  COMPUTER MOVES
  69. 660  PRINT "I MOVE TO ";M4
  70. 662  COLOR= 3: ON B GOSUB 11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011
  71. 664  COLOR= 0: ON M4 GOSUB 11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011
  72. 670  LET R(I0,1) = S3
  73. 680  LET R(I0,2) = M4
  74. 690  LET B = M4
  75. 700  LET I0 = I0 +1
  76. 710  IF B < >1  THEN 500
  77. 720  REM  HERE ONLY IF MACHINE WINS
  78. 730  PRINT "I WIN<CTRL-G>.<CTRL-G>.<CTRL-G>.<CTRL-G>.<CTRL-G>.<CTRL-G>."
  79. 740  LET W = 1
  80. 750  GOTO 780
  81. 760  PRINT "<CTRL-G>I LOST......"
  82. 770  LET W =  -1
  83. 780  REM  UPDATE ARRAY A
  84. 790  GOSUB 6000
  85. 800  PRINT "WANT TO PLAY AGAIN? ";
  86. 810  INPUT Z$
  87. 820  IF  LEFT$(Z$,1) = "Y"  THEN 340
  88. 830  REM  DISK COMMAND "STORE DATA        #5,34,A"
  89. 840  STOP 
  90. 2000  REM  CHECK WHITES MOVE FOR        LEGALITY
  91. 2030  LET L2 =  -1
  92. 2040  FOR I2 = 1 TO 3
  93. 2050  LET J2 = I2
  94. 2060  IF W(I2) = X  THEN 2100
  95. 2070  NEXT I2
  96. 2080  REM  NO WHITE PIECE AT X
  97. 2090  GOTO 2200
  98. 2100  REM IF BLACK IS AT Y THEN ILLEGAL
  99. 2110  IF B = Y  THEN 2200
  100. 2120  REM  ILLEGAL IF WHITE AT Y
  101. 2130  FOR I2 = 1 TO 3
  102. 2140  IF W(I2) = Y  THEN 2200
  103. 2150  NEXT I2
  104. 2160  IF L(X,Y) < >2  THEN 2200
  105. 2170  REM  LEGAL MOVE FOR WHITE
  106. 2180  LET W(J2) = Y
  107. 2190  LET L2 = 1
  108. 2200  RETURN 
  109. 3000  REM  CALCULATE NEW WHITE         POSITION NUMBER
  110. 3010  LET A3 =  FN P(W(1)) + FN P(W(2)) + FN P(W(3))
  111. 3020  FOR S3 = 1 TO 165
  112. 3030  IF S(S3) = A3  THEN 3050
  113. 3040  NEXT S3
  114. 3050  RETURN 
  115. 4000  REM  PICK BLACK'S BEST MOVE
  116. 4010  LET M4 = 0
  117. 4020  FOR I4 = 1 TO 11
  118. 4030  IF L(B,I4) = 0  THEN 4110
  119. 4040  REM  OCCUPIED BY WHITE?
  120. 4050  FOR J4 = 1 TO 3
  121. 4060  IF W(J4) = I4  THEN 4110
  122. 4070  NEXT J4
  123. 4075  IF M4 = 0  THEN 4100
  124. 4080  IF A(S3,M4) > = A(S3,I4)  THEN 4110
  125. 4090  REM  NEW BEST MOVE
  126. 4100  LET M4 = I4
  127. 4110  NEXT I4
  128. 4120  RETURN 
  129. 6000  REM  UPDATE AT GAME END
  130. 6010  FOR I6 = 1 TO I0 -1
  131. 6020  LET S = R(I6,1)
  132. 6030  LET M = R(I6,2)
  133. 6040  LET A(S,M) = A(S,M) +W
  134. 6050  NEXT I6
  135. 6060  RETURN 
  136. 8999  REM  DATA FOR L ARRAY
  137. 9000  DATA  0,2,2,2,0,0,0,0,0,0,0
  138. 9010  DATA  1,0,2,0,2,2,0,0,0,0,0
  139. 9020  DATA  1,2,0,2,0,2,0,0,0,0,0
  140. 9030  DATA  1,0,2,0,0,2,2,0,0,0,0
  141. 9040  DATA  0,1,0,0,0,2,0,2,0,0,0
  142. 9050  DATA  0,1,1,1,2,0,2,2,2,2,0
  143. 9060  DATA  0,0,0,1,0,2,0,0,0,2,0
  144. 9070  DATA  0,0,0,0,1,1,0,0,2,0,2
  145. 9080  DATA  0,0,0,0,0,1,0,2,0,2,2
  146. 9090  DATA  0,0,0,0,0,1,1,0,2,0,2
  147. 9100  DATA  0,0,0,0,0,0,0,2,2,2,0
  148. 9110  END 
  149. 10000  REM  <CTRL-J><CTRL-J>DRAW BOARD<CTRL-J><CTRL-J>
  150. 10010  GR 
  151. 10020  COLOR= 1: FOR Y = 0 TO 39: HLIN 0,39 AT Y: NEXT Y
  152. 10030  COLOR= 3: FOR Y = 6 TO 10: HLIN 9,13 AT Y: HLIN 18,22 AT Y: HLIN 27,31 AT Y: NEXT Y
  153. 10040  FOR Y = 17 TO 21: HLIN 0,4 AT Y: HLIN 9,13 AT Y: HLIN 18,22 AT Y: HLIN 27,31 AT Y: HLIN 36,39 AT Y: NEXT Y
  154. 10050  FOR Y = 28 TO 32: HLIN 9,13 AT Y: HLIN 18,22 AT Y: HLIN 27,31 AT Y: NEXT Y
  155. 10060  HLIN 9,31 AT 8: HLIN 5,35 AT 19: HLIN 9,31 AT 30
  156. 10070  VLIN 8,30 AT 11: VLIN 8,30 AT 20: VLIN 8,30 AT 29
  157. 10080 Y = 19: FOR X = 1 TO 12: PLOT X,Y:Y = Y +1: NEXT X
  158. 10090 Y = 28: FOR X = 12 TO 19: PLOT X,Y:Y = Y -1: NEXT X
  159. 10100 Y = 19: FOR X = 19 TO 28: PLOT X,Y:Y = Y +1: NEXT X
  160. 10110 Y = 10: FOR X = 12 TO 19: PLOT X,Y:Y = Y +1: NEXT X
  161. 10120 Y = 19: FOR X = 19 TO 28: PLOT X,Y:Y = Y -1: NEXT X
  162. 10130 Y = 10: FOR X = 30 TO 37: PLOT X,Y:Y = Y +1: NEXT X
  163. 10140 Y = 19: FOR X = 1 TO 12: PLOT X,Y:Y = Y -1: NEXT X
  164. 10150 Y = 28: FOR X = 30 TO 37: PLOT X,Y:Y = Y -1: NEXT X
  165. 10160  COLOR= 15: GOSUB 11001: GOSUB 11002: GOSUB 11004
  166. 10170  COLOR= 0: GOSUB 11006
  167. 10180  RETURN 
  168. 11000  REM  SQUARE 1
  169. 11001  FOR Y3 = 18 TO 20: HLIN 1,3 AT Y3: NEXT Y3: RETURN 
  170. 11002  FOR Y3 = 7 TO 9: HLIN 10,12 AT Y3: NEXT Y3: RETURN 
  171. 11003  FOR Y3 = 18 TO 20: HLIN 10,12 AT Y3: NEXT Y3: RETURN 
  172. 11004  FOR Y3 = 29 TO 31: HLIN 10,12 AT Y3: NEXT Y3: RETURN 
  173. 11005  FOR Y3 = 7 TO 9: HLIN 19,21 AT Y3: NEXT Y3: RETURN 
  174. 11006  FOR Y3 = 18 TO 20: HLIN 19,21 AT Y3: NEXT Y3: RETURN 
  175. 11007  FOR Y3 = 29 TO 31: HLIN 19,21 AT Y3: NEXT Y3: RETURN 
  176. 11008  FOR Y3 = 7 TO 9: HLIN 28,30 AT Y3: NEXT Y3: RETURN 
  177. 11009  FOR Y3 = 18 TO 20: HLIN 28,30 AT Y3: NEXT Y3: RETURN 
  178. 11010  FOR Y3 = 29 TO 31: HLIN 28,30 AT Y3: NEXT Y3: RETURN 
  179. 11011  FOR Y3 = 18 TO 20: HLIN 37,39 AT Y3: NEXT Y3: RETURN 
  180. 12000  REM  INSTRUCTIONS
  181. 12010  HOME 
  182. 12020  PRINT "             2----5----8"
  183. 12030  PRINT "            /!\   !   /!\"
  184. 12040  PRINT "           / ! \  !  / ! \"
  185. 12050  PRINT "          /  !  \ ! /  !  \"
  186. 12060  PRINT "         /   !   \!/   !   \"
  187. 12070  PRINT "        1----3----6----9----11"
  188. 12080  PRINT "         \   !   /!\   !   /"
  189. 12090  PRINT "          \  !  / ! \  !  /"
  190. 12100  PRINT "           \ ! /  !  \ ! /"
  191. 12110  PRINT "            \!/   !   \!/"
  192. 12120  PRINT "             4----7---10"
  193. 12130  POKE 34,11
  194. 12140  HOME 
  195. 12150  PRINT "  THE PLAYING FIELD FOR THE FRENCH"
  196. 12160  PRINT "MILITARY GAME IS SHOWN ABOVE. YOU WILL"
  197. 12170  PRINT "PLAY WHITE AND WILL START WITH THREE"
  198. 12180  PRINT "MEN LOCATED AT 1, 2, AND 4. BLACK HAS"
  199. 12190  PRINT "ONLY ONE MAN, WHICH STARTS AT 6. WHITE"
  200. 12200  PRINT "HAS THE FIRST MOVE AND MAY MOVE ANY ONE"
  201. 12210  PRINT "PIECE ONE SPACE."
  202. 12220  PRINT "   WHITE MAY ONLY MOVE UP, DOWN, OR TO"
  203. 12230  PRINT "THE RIGHT. BLACK MAY MOVE IN ANY DIREC-"
  204. 12240  PRINT "TION. NO PIECE MAY MOVE TO A SPACE"
  205. 12250  PRINT "OCCUPIED BY ANOTHER PIECE."
  206. 12260  PRINT : PRINT " << PRESS THE SPACE BAR TO CONTINUE >>";
  207. 12270  IF  PEEK( -16384) <127  THEN 12270
  208. 12280  POKE  -16368,0
  209. 12290  HOME 
  210. 12300  PRINT "   WHITE WINS THE GAME BY PINNING THE"
  211. 12310  PRINT "BLACK PIECE SO THAT BLACK HAS NO MOVE."
  212. 12320  PRINT "THIS USUALLY OCCURS WITH BLACK TRAPPED"
  213. 12330  PRINT "AT 11, BUT IF BLACK PLAYS POORLY IT MAY"
  214. 12340  PRINT "BE PINNED AT 5 OR 7. BLACK WINS BY"
  215. 12350  PRINT "REACHING 1 OR BY EVADING BEING PINNED"
  216. 12360  PRINT "FOR 20 MOVES."
  217. 12370  PRINT "   WHITE CAN ALWAYS WIN IF HE PLAYS"
  218. 12380  PRINT "CORRECTLY AND DOES NOT MAKE ANY MIS-"
  219. 12390  PRINT "TAKES. BUT IF YOU WANT TO RESIGN JUST"
  220. 12395  PRINT "TYPE 0,0"
  221. 12400  VTAB 24: PRINT " << PRESS THE SPACE BAR TO CONTINUE >>";
  222. 12410  IF  PEEK( -16384) <127  THEN 12410
  223. 12415  POKE  -16368,0
  224. 12420  HOME 
  225. 12430  PRINT "   THE GAME IS VERY EASY TO WIN THE"
  226. 12440  PRINT "FIRST FEW TIMES IT IS PLAYED, BUT IT"
  227. 12450  PRINT "WILL LEARN FROM ITS MISTAKES AND BECOME"
  228. 12460  PRINT "INCREASINGLY MORE DIFFICULT TO BEAT."
  229. 12470  PRINT "   THE PROGRAM STORES WHAT IS HAS"
  230. 12480  PRINT "LEARNED IN AN ARRAY THAT MAY BE SAVED"
  231. 12490  PRINT "ON DISC OR TAPE."
  232. 12500  PRINT "   IF THIS ARRAY IS NOT SAVED OR IS NOT"
  233. 12510  PRINT "RELOADED THE PROGRAM WILL START FROM"
  234. 12520  PRINT "THE BEGINNING IN LEARNING HOW TO PLAY"
  235. 12530  PRINT "EVERYTIME IT IS RUN."
  236. 12540  VTAB 24: PRINT " << PRESS THE SPACE BAR TO CONTINUE >>";
  237. 12550  IF  PEEK( -16384) <127  THEN 12550
  238. 12560  POKE  -16368,0
  239. 12570  TEXT : HOME 
  240. 12580  RETURN